package com.learn.dubbo.core.redis.Interface;

import java.util.List;
import java.util.Set;

import redis.clients.jedis.SortingParams;


public interface JedisKeys extends JedisBaseInterface {

	/**
	 * @Title: rename 
	 * @author 林彬
	 * @Description: 更改key 
	 * @date 2016年12月28日 下午2:02:09 
	 * @return String   
	 * @throws
	 */
	public String rename(String oldkey,String newkey);
	
	/**
     * 设置过期时间
     *
     * @author ruan 2013-4-11
     * @param key
     * @param seconds
     */
    public void expire(String key, int seconds);
    
    /**
     * 设置默认过期时间
     *
     * @author ruan 2013-4-11
     * @param key
     */
    public void expire(String key);
    
    /**
     * 设置key的过期时间,它是距历元（即格林威治标准时间 1970 年 1 月 1 日的 00:00:00，格里高利历）的偏移量。
     *
     * @param String key
     * @param 时间,已秒为单位
     * @return 影响的记录数
     * */
    public long expireAt(String key, long timestamp);
    
    /**
     * 查询key的过期时间
     *
     * @param String key
     * @return 以秒为单位的时间表示
     * */
    public long ttl(String key);
    
    /**
     * 取消对key过期时间的设置
     *
     * @param key
     * @return 影响的记录数
     * */
    public long persist(String key);
    
    /**
     * 删除keys对应的记录,可以是多个key
     *
     * @param String
     *            ... keys
     * @return 删除的记录数
     * */
    public long del(String... keys);
    
    /**
     * 判断key是否存在
     *
     * @param String key
     * @return boolean
     * */
    public boolean exists(String key);
    
    /**
     * 返回指定key存储的类型
     *
     * @param String
     *            key
     * @return String string|list|set|zset|hash
     * **/
    public String type(String key);
    
    /**
     * 查找所有匹配给定的模式的键，对key的模糊查询
     *
     * @param String
     *            key的表达式,*表示多个，？表示一个
     * Set<String> keys = jedis.keys("*");
		Set<String> keys = jedis.keys("user.userid.*");
     * */
    public Set<String> keys(String pattern);
    
    /**
     * 对List,Set,SortSet进行排序,如果集合数据较大应避免使用这个方法
     *
     * @param String
     *            key
     * @return List<String> 集合的全部记录
     * **/
    public List<String> sort(String key);
    
    /**
     * 对List,Set,SortSet进行排序或limit
     *
     * @param String
     *            key
     * @param SortingParams
     *            parame 定义排序类型或limit的起止位置.
     * @return List<String> 全部或部分记录
     * **/
    public List<String> sort(String key, SortingParams parame);
    
    /**
     * 
     * @Title: dbsize 
     * @author 林彬
     * @Description: 返回当前数据库中key的数目 
     * @date 2016年12月28日 下午3:20:56 
     * @return Long   
     * @throws
     */
    public Long dbsize();

}
